/* 
 * File:   Servidor.h
 * Author: max
 *
 * Created on October 19, 2012, 12:31 AM
 */

#ifndef SERVIDOR_H
#define	SERVIDOR_H


#include <iostream>
#include <fstream>
#include <vector>
#include "common_Thread.h"
#include "common_Excepcion.h"
#include "server_Conexion.h"
#include "server_IManejadorSesionEvento.h"
#include "server_IManejadorConexionEvento.h"
#include "server_Sesion.h"
#include "server_VulnerabilidadService.h"

using namespace std;
using namespace TP;
using namespace TP::Servicios;
using namespace TP::Threading;
using namespace TP::Comunicacion;
using namespace TP::Comunicacion::Eventos;

namespace TP { namespace Comunicacion {

    class Servidor : public IManejadorSesionEvento, public IManejadorConexionEvento {
        
    public:
        
        Servidor(const string& pPuerto, const string& pVulnerabilidadesDataPath, const string& pVulnerabilidadesDefinicionesDataPath );
        
        virtual ~Servidor();
        
        virtual void Iniciar() throw (Excepcion&);
        
        virtual void Finalizar() throw (Excepcion&);
        
        virtual void eventoNuevaSesion (IEnviante* pSesion, void* pArg);
        
        virtual void eventoErrorComunicacion (IEnviante* pEnviante, const string& pMensaje );
        
        virtual void eventoConexionFinalizada (IEnviante* pEnviante, const string& pMensaje);
        
        virtual void eventoErrorConexionInexistente (IEnviante* pConexion, const string& pMensaje);
        
    private:
        
        Conexion* conexion;
        VulnerabilidadService* vulnerabilidades;
        vector<Sesion*> sesiones;
    };
}}


#endif	/* SERVIDOR_H */

